iT邦幫忙

2023 iThome 鐵人賽

DAY 27
1
AI & Data

AIoT的藍藥丸與紅藥丸,你選哪個?系列 第 50

Day 27:Flask 與 Docker 的密室大逃殺

  • 分享至 

  • xImage
  •  

前情提要

  在Day 26:繼電器的控制悖論中,你的室友們想要潛入女生宿舍送宵夜,還拉你下水,但當室友A──眼鏡仔破解門禁系統時,卻觸發了保護機制,結果你、眼鏡仔、毛帽男三人被困在一個女生房間裡。
  你們發現房間裡有一個盆栽,上面的樹莓正閃爍著紅色LED亮光,裡面還有一條線連接到DHT22溫溼度感測器。你們發現如果溫度跟濕度達到一定的標準,就會觸發繼電器。你們想盡辦法成功觸發繼電器後,發現這個繼電器連接到風扇的插頭,然後風扇開始緩緩轉動。
  你們在風扇後面找到一張紙條,上面寫著要你們用WebCam攝影機拍照,然後用Python程式把照片轉換成ASCII碼,再用GPIO4接腳控制LED燈,讓它閃爍出ASCII碼。
  最後,眼鏡仔成功寫出Python程式,接著按下執行。你們三個屏氣凝神觀察著LED燈的閃爍情況。結果發現風扇的扇葉在燈光閃爍下越轉越快,呈現出一個類似鈑手的圖案,似乎暗示著你們要把電風扇拆開。
  你們拆開後發現裡面居然藏著一塊電路板!原來,這就是你們在找的隱藏的電路板。你們終於可以用電路板來欺騙門禁系統,讓門禁系統以為你們是合法的使用者,這樣你們就可以逃出密室,看到大漂亮了!

駭入門禁系統

  你們拿著電路板,想要找到一個可以連接到門禁系統的接口。你們發現門上有一個小小的孔,裡面有一個 USB 孔。你們猜測這個 USB 孔可能是用來更新門禁系統的軟體或資料的。你們想到可以用電路板來模擬 USB 裝置,然後傳送一些指令給門禁系統,讓它認為你們是合法的使用者。
  「我來試試吧!」眼鏡仔說,他把電路板上的一條線接到 USB 插槽上,然後用筆電連接到電路板上的另一條線。他打開筆電,開始在畫面輸入一些 Python 程式碼。
  「這是什麼?」毛帽哥問,他看著眼鏡仔輸入的程式碼。
  「這是用來模擬 USB 裝置的程式碼。」眼鏡仔說,「我要用 Python 的 pyusb 模組來控制 USB 的通訊協定。」

如果想了解「為什麼要用 Pythonpyusb 模組來控制 USB 的通訊協定」,可以參考我的Pythonpyusb 模組來控制 USB 的通訊協定的補充,也可以參考阿甘的小窩(2020)寫的這篇文章

  「pyusb 模組可以幹嘛?」毛帽哥又問。
  「pyusb 模組可以讓我們用 Python 來操作 USB 裝置,例如讀取和寫入資料,或者發送和接收控制訊號。」眼鏡仔說。
  「那要怎麼知道門禁系統要接收什麼指令才會開門呢?」毛帽哥再問。
  「我不知道啊。」眼鏡仔說,「所以我要嘗試用不同的指令來測試門禁系統的反應,看看有沒有什麼規律或漏洞。」
  「蛤?要是觸發了什麼警報或自毀裝置怎麼辦?」毛帽哥擔心地說。
  「我不會亂試啦!」眼鏡仔說,「我會先分析門禁系統的型號和版本,然後查資料看文件,看看有沒有什麼提示或漏洞。」
  「那你快啊!時間不多了!」在毛帽哥催促下,眼鏡仔按下執行鍵。

用 Docker 架設 Flask Web Server

  眼鏡仔的程式開始跑了,筆電上跑出一些資訊和訊息。

門禁系統的型號是`RPi-DoorLock V2.0`,版本是 `1.5.3` 。

  你們在網路上查了一下,發現這個型號的門禁系統是用 Raspberry Pi 作為核心,還使用了 Flask 當作 Web 框架,用一個 Web 介面 來管理和控制門禁系統。
  「Flask?這是我們最近在學的嗎?用 Python 寫的輕量級 Web 框架?」毛帽哥說,他想起了前幾天上課,老師好像有講到。
  「對啊, Flask可以快速建立 Web 應用程式。」眼鏡仔說,「而且 Flask 還可以用 Docker 來部署和運行。」
  「 Docker?那是啥?」毛帽哥問。
  「 Docker 是一種使用作業系統等級的虛擬化技術,可以讓我們將程式和函式庫打包成容器,方便遷移和擴展。」你想起之前在前一個密室學到的內容……突然覺得恍如隔世,「我們可以用 Dockerfile 來定義容器的內容和設定,然後用 docker 指令來建立和執行容器。」
  「欸!不錯喔!」眼鏡仔用手肘輕輕撞你一下,表示讚美,「剛好我發現了一個漏洞。」
  眼鏡仔興奮地說:「你們看這裡,這個門禁系統的 Flask 容器沒有設定密碼或驗證機制,所以我們可以直接訪問它的 Web 介面,然後用 POST 請求來傳送開門指令。」

如果想了解「用 Docker 架設 Flask Web Server的潛在安全風險」,可以參考我的用 Docker 架設 Flask Web Server的潛在安全風險的補充,以及興趣使然的小胃(2019)寫的這篇文章


上一篇
ASCII之謎:閃爍的LED密碼之光
下一篇
補充:用 Python 的 pyusb模組 來控制 USB 的通訊協定
系列文
AIoT的藍藥丸與紅藥丸,你選哪個?62
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言